/* ****************************************************************************
 *
 * Copyright (c) Microsoft Corporation. 
 *
 * This source code is subject to terms and conditions of the Microsoft Public License. A 
 * copy of the license can be found in the License.html file at the root of this distribution. If 
 * you cannot locate the  Microsoft Public License, please send an email to 
 * dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound 
 * by the terms of the Microsoft Public License.
 *
 * You must not remove this notice, or any other, from this software.
 *
 *
 * ***************************************************************************/

namespace Microsoft.Scripting.Ast {
    internal partial class AstWriter {

        private delegate void Writer(AstWriter ar, Expression expr);

        private static readonly Writer[] _Writers = {
            #region Generated Ast Writer

            // *** BEGIN GENERATED CODE ***
            // generated by function: gen_ast_writer from: generate_tree.py

            WriteBinaryExpression,                  //    Add
            WriteBinaryExpression,                  //    AddChecked
            WriteBinaryExpression,                  //    And
            WriteBinaryExpression,                  //    AndAlso
            WriteUnaryExpression,                   //    ArrayLength
            WriteBinaryExpression,                  //    ArrayIndex
            WriteMethodCallExpression,              //    Call
            WriteBinaryExpression,                  //    Coalesce
            WriteConditionalExpression,             //    Conditional
            WriteConstantExpression,                //    Constant
            WriteUnaryExpression,                   //    Convert
            WriteUnaryExpression,                   //    ConvertChecked
            WriteBinaryExpression,                  //    Divide
            WriteBinaryExpression,                  //    Equal
            WriteBinaryExpression,                  //    ExclusiveOr
            WriteBinaryExpression,                  //    GreaterThan
            WriteBinaryExpression,                  //    GreaterThanOrEqual
            WriteInvocationExpression,              //    Invoke
            WriteLambdaExpression,                  //    Lambda
            WriteBinaryExpression,                  //    LeftShift
            WriteBinaryExpression,                  //    LessThan
            WriteBinaryExpression,                  //    LessThanOrEqual
                                                    // ** ListInit
            WriteMemberExpression,                  //    MemberAccess
                                                    // ** MemberInit
            WriteBinaryExpression,                  //    Modulo
            WriteBinaryExpression,                  //    Multiply
            WriteBinaryExpression,                  //    MultiplyChecked
            WriteUnaryExpression,                   //    Negate
            WriteUnaryExpression,                   //    UnaryPlus
            WriteUnaryExpression,                   //    NegateChecked
            WriteNewExpression,                     //    New
            WriteNewArrayExpression,                //    NewArrayInit
            WriteNewArrayExpression,                //    NewArrayBounds
            WriteUnaryExpression,                   //    Not
            WriteBinaryExpression,                  //    NotEqual
            WriteBinaryExpression,                  //    Or
            WriteBinaryExpression,                  //    OrElse
            WriteParameterExpression,               //    Parameter
            WriteBinaryExpression,                  //    Power
            WriteUnaryExpression,                   //    Quote
            WriteBinaryExpression,                  //    RightShift
            WriteBinaryExpression,                  //    Subtract
            WriteBinaryExpression,                  //    SubtractChecked
            WriteUnaryExpression,                   //    TypeAs
            WriteTypeBinaryExpression,              //    TypeIs
            WriteActionExpression,                  //    ActionExpression
            WriteAssignmentExpression,              //    Assign
            WriteBlock,                             //    Block
            WriteBreakStatement,                    //    BreakStatement
            WriteLambdaExpression,                  //    Generator
            WriteContinueStatement,                 //    ContinueStatement
            WriteDeleteExpression,                  //    Delete
            WriteDoStatement,                       //    DoStatement
            WriteEmptyStatement,                    //    EmptyStatement
            WriteLabeledStatement,                  //    LabeledStatement
            WriteLocalScopeExpression,              //    LocalScope
            WriteLoopStatement,                     //    LoopStatement
            WriteUnaryExpression,                   //    OnesComplement
            WriteReturnStatement,                   //    ReturnStatement
            WriteScopeExpression,                   //    Scope
            WriteSwitchStatement,                   //    SwitchStatement
            WriteThrowStatement,                    //    ThrowStatement
            WriteTryStatement,                      //    TryStatement
            WriteVariableExpression,                //    Variable
            WriteYieldStatement,                    //    YieldStatement
            WriteExtensionExpression,               //    Extension

            // *** END GENERATED CODE ***

            #endregion
        };

    }
}
